#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
btTypedConstraintFloatData* bullet_NewbtTypedConstraintFloatData(){
	btTypedConstraintFloatData* wrap_out = new btTypedConstraintFloatData();
	return wrap_out;
}

float bullet_btTypedConstraintFloatData_GetFieldOfM_appliedImpulse(btTypedConstraintFloatData* c_this){
	return (float)(c_this->m_appliedImpulse);
}

float bullet_btTypedConstraintFloatData_GetFieldOfM_breakingImpulseThreshold(btTypedConstraintFloatData* c_this){
	return (float)(c_this->m_breakingImpulseThreshold);
}

float bullet_btTypedConstraintFloatData_GetFieldOfM_dbgDrawSize(btTypedConstraintFloatData* c_this){
	return (float)(c_this->m_dbgDrawSize);
}

int bullet_btTypedConstraintFloatData_GetFieldOfM_disableCollisionsBetweenLinkedBodies(btTypedConstraintFloatData* c_this){
	return (int)(c_this->m_disableCollisionsBetweenLinkedBodies);
}

int bullet_btTypedConstraintFloatData_GetFieldOfM_isEnabled(btTypedConstraintFloatData* c_this){
	return (int)(c_this->m_isEnabled);
}

char** bullet_btTypedConstraintFloatData_GetFieldOfM_name(btTypedConstraintFloatData* c_this){
	return (char**)(&c_this->m_name);
}

int bullet_btTypedConstraintFloatData_GetFieldOfM_needsFeedback(btTypedConstraintFloatData* c_this){
	return (int)(c_this->m_needsFeedback);
}

int bullet_btTypedConstraintFloatData_GetFieldOfM_objectType(btTypedConstraintFloatData* c_this){
	return (int)(c_this->m_objectType);
}

int bullet_btTypedConstraintFloatData_GetFieldOfM_overrideNumSolverIterations(btTypedConstraintFloatData* c_this){
	return (int)(c_this->m_overrideNumSolverIterations);
}

btRigidBodyFloatData** bullet_btTypedConstraintFloatData_GetFieldOfM_rbA(btTypedConstraintFloatData* c_this){
	return (btRigidBodyFloatData**)(&c_this->m_rbA);
}

btRigidBodyFloatData** bullet_btTypedConstraintFloatData_GetFieldOfM_rbB(btTypedConstraintFloatData* c_this){
	return (btRigidBodyFloatData**)(&c_this->m_rbB);
}

int bullet_btTypedConstraintFloatData_GetFieldOfM_userConstraintId(btTypedConstraintFloatData* c_this){
	return (int)(c_this->m_userConstraintId);
}

int bullet_btTypedConstraintFloatData_GetFieldOfM_userConstraintType(btTypedConstraintFloatData* c_this){
	return (int)(c_this->m_userConstraintType);
}

btTypedConstraintDoubleData* bullet_NewbtTypedConstraintDoubleData(){
	btTypedConstraintDoubleData* wrap_out = new btTypedConstraintDoubleData();
	return wrap_out;
}

double bullet_btTypedConstraintDoubleData_GetFieldOfM_appliedImpulse(btTypedConstraintDoubleData* c_this){
	return (double)(c_this->m_appliedImpulse);
}

double bullet_btTypedConstraintDoubleData_GetFieldOfM_breakingImpulseThreshold(btTypedConstraintDoubleData* c_this){
	return (double)(c_this->m_breakingImpulseThreshold);
}

double bullet_btTypedConstraintDoubleData_GetFieldOfM_dbgDrawSize(btTypedConstraintDoubleData* c_this){
	return (double)(c_this->m_dbgDrawSize);
}

int bullet_btTypedConstraintDoubleData_GetFieldOfM_disableCollisionsBetweenLinkedBodies(btTypedConstraintDoubleData* c_this){
	return (int)(c_this->m_disableCollisionsBetweenLinkedBodies);
}

int bullet_btTypedConstraintDoubleData_GetFieldOfM_isEnabled(btTypedConstraintDoubleData* c_this){
	return (int)(c_this->m_isEnabled);
}

char** bullet_btTypedConstraintDoubleData_GetFieldOfM_name(btTypedConstraintDoubleData* c_this){
	return (char**)(&c_this->m_name);
}

int bullet_btTypedConstraintDoubleData_GetFieldOfM_needsFeedback(btTypedConstraintDoubleData* c_this){
	return (int)(c_this->m_needsFeedback);
}

int bullet_btTypedConstraintDoubleData_GetFieldOfM_objectType(btTypedConstraintDoubleData* c_this){
	return (int)(c_this->m_objectType);
}

int bullet_btTypedConstraintDoubleData_GetFieldOfM_overrideNumSolverIterations(btTypedConstraintDoubleData* c_this){
	return (int)(c_this->m_overrideNumSolverIterations);
}

btRigidBodyDoubleData** bullet_btTypedConstraintDoubleData_GetFieldOfM_rbA(btTypedConstraintDoubleData* c_this){
	return (btRigidBodyDoubleData**)(&c_this->m_rbA);
}

btRigidBodyDoubleData** bullet_btTypedConstraintDoubleData_GetFieldOfM_rbB(btTypedConstraintDoubleData* c_this){
	return (btRigidBodyDoubleData**)(&c_this->m_rbB);
}

int bullet_btTypedConstraintDoubleData_GetFieldOfM_userConstraintId(btTypedConstraintDoubleData* c_this){
	return (int)(c_this->m_userConstraintId);
}

int bullet_btTypedConstraintDoubleData_GetFieldOfM_userConstraintType(btTypedConstraintDoubleData* c_this){
	return (int)(c_this->m_userConstraintType);
}

char** bullet_btTypedConstraintDoubleData_GetFieldOfPadding(btTypedConstraintDoubleData* c_this){
	return (char**)(&c_this->padding);
}

btTypedConstraintData* bullet_NewbtTypedConstraintData(){
	btTypedConstraintData* wrap_out = new btTypedConstraintData();
	return wrap_out;
}

float bullet_btTypedConstraintData_GetFieldOfM_appliedImpulse(btTypedConstraintData* c_this){
	return (float)(c_this->m_appliedImpulse);
}

float bullet_btTypedConstraintData_GetFieldOfM_breakingImpulseThreshold(btTypedConstraintData* c_this){
	return (float)(c_this->m_breakingImpulseThreshold);
}

float bullet_btTypedConstraintData_GetFieldOfM_dbgDrawSize(btTypedConstraintData* c_this){
	return (float)(c_this->m_dbgDrawSize);
}

int bullet_btTypedConstraintData_GetFieldOfM_disableCollisionsBetweenLinkedBodies(btTypedConstraintData* c_this){
	return (int)(c_this->m_disableCollisionsBetweenLinkedBodies);
}

int bullet_btTypedConstraintData_GetFieldOfM_isEnabled(btTypedConstraintData* c_this){
	return (int)(c_this->m_isEnabled);
}

char** bullet_btTypedConstraintData_GetFieldOfM_name(btTypedConstraintData* c_this){
	return (char**)(&c_this->m_name);
}

int bullet_btTypedConstraintData_GetFieldOfM_needsFeedback(btTypedConstraintData* c_this){
	return (int)(c_this->m_needsFeedback);
}

int bullet_btTypedConstraintData_GetFieldOfM_objectType(btTypedConstraintData* c_this){
	return (int)(c_this->m_objectType);
}

int bullet_btTypedConstraintData_GetFieldOfM_overrideNumSolverIterations(btTypedConstraintData* c_this){
	return (int)(c_this->m_overrideNumSolverIterations);
}

btRigidBodyDoubleData** bullet_btTypedConstraintData_GetFieldOfM_rbA(btTypedConstraintData* c_this){
	return (btRigidBodyDoubleData**)(&c_this->m_rbA);
}

btRigidBodyDoubleData** bullet_btTypedConstraintData_GetFieldOfM_rbB(btTypedConstraintData* c_this){
	return (btRigidBodyDoubleData**)(&c_this->m_rbB);
}

int bullet_btTypedConstraintData_GetFieldOfM_userConstraintId(btTypedConstraintData* c_this){
	return (int)(c_this->m_userConstraintId);
}

int bullet_btTypedConstraintData_GetFieldOfM_userConstraintType(btTypedConstraintData* c_this){
	return (int)(c_this->m_userConstraintType);
}

btTypedConstraint::btConstraintInfo2* bullet_NewbtTypedConstraintbtConstraintInfo2(){
	btTypedConstraint::btConstraintInfo2* wrap_out = new btTypedConstraint::btConstraintInfo2();
	return wrap_out;
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfCfm(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->cfm);
}

double bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfErp(btTypedConstraint::btConstraintInfo2* c_this){
	return (double)(c_this->erp);
}

double bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfFps(btTypedConstraint::btConstraintInfo2* c_this){
	return (double)(c_this->fps);
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_constraintError(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->m_constraintError);
}

double bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_damping(btTypedConstraint::btConstraintInfo2* c_this){
	return (double)(c_this->m_damping);
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_J1angularAxis(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->m_J1angularAxis);
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_J1linearAxis(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->m_J1linearAxis);
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_J2angularAxis(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->m_J2angularAxis);
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_J2linearAxis(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->m_J2linearAxis);
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_lowerLimit(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->m_lowerLimit);
}

int bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_numIterations(btTypedConstraint::btConstraintInfo2* c_this){
	return (int)(c_this->m_numIterations);
}

double** bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfM_upperLimit(btTypedConstraint::btConstraintInfo2* c_this){
	return (double**)(&c_this->m_upperLimit);
}

int bullet_btTypedConstraintbtConstraintInfo2_GetFieldOfRowskip(btTypedConstraint::btConstraintInfo2* c_this){
	return (int)(c_this->rowskip);
}

btTypedConstraint::btConstraintInfo1* bullet_NewbtTypedConstraintbtConstraintInfo1(){
	btTypedConstraint::btConstraintInfo1* wrap_out = new btTypedConstraint::btConstraintInfo1();
	return wrap_out;
}

int bullet_btTypedConstraintbtConstraintInfo1_GetFieldOfM_numConstraintRows(btTypedConstraint::btConstraintInfo1* c_this){
	return (int)(c_this->m_numConstraintRows);
}

int bullet_btTypedConstraintbtConstraintInfo1_GetFieldOfNub(btTypedConstraint::btConstraintInfo1* c_this){
	return (int)(c_this->nub);
}

void bullet_btTypedConstraint_enableFeedback(btTypedConstraint* c_this,bool needsFeedback){
	bool c_arg_needsFeedback=needsFeedback;
	c_this->enableFeedback(c_arg_needsFeedback);
}

double bullet_btTypedConstraint_getAppliedImpulse(btTypedConstraint* c_this){
	btScalar c_out = c_this->getAppliedImpulse();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btTypedConstraint_getBreakingImpulseThreshold(btTypedConstraint* c_this){
	btScalar c_out = c_this->getBreakingImpulseThreshold();
	double wrap_out = (c_out);
	return wrap_out;
}

btTypedConstraintType bullet_btTypedConstraint_getConstraintType(btTypedConstraint* c_this){
	btTypedConstraintType c_out = c_this->getConstraintType();
	btTypedConstraintType wrap_out = (c_out);
	return wrap_out;
}

double bullet_btTypedConstraint_getDbgDrawSize(btTypedConstraint* c_this){
	btScalar c_out = c_this->getDbgDrawSize();
	double wrap_out = (c_out);
	return wrap_out;
}

int bullet_btTypedConstraint_getOverrideNumSolverIterations(btTypedConstraint* c_this){
	int c_out = c_this->getOverrideNumSolverIterations();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btTypedConstraint_getUid(btTypedConstraint* c_this){
	int c_out = c_this->getUid();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btTypedConstraint_getUserConstraintId(btTypedConstraint* c_this){
	int c_out = c_this->getUserConstraintId();
	int wrap_out = (c_out);
	return wrap_out;
}

void* bullet_btTypedConstraint_getUserConstraintPtr(btTypedConstraint* c_this){
	void * c_out = c_this->getUserConstraintPtr();
	void* wrap_out = (void*)(void*)(c_out);
	return wrap_out;
}

int bullet_btTypedConstraint_getUserConstraintType(btTypedConstraint* c_this){
	int c_out = c_this->getUserConstraintType();
	int wrap_out = (c_out);
	return wrap_out;
}

double bullet_btTypedConstraint_internalGetAppliedImpulse(btTypedConstraint* c_this){
	btScalar c_out = c_this->internalGetAppliedImpulse();
	double wrap_out = (c_out);
	return wrap_out;
}

void bullet_btTypedConstraint_internalSetAppliedImpulse(btTypedConstraint* c_this,double appliedImpulse){
	btScalar c_arg_appliedImpulse=appliedImpulse;
	c_this->internalSetAppliedImpulse(c_arg_appliedImpulse);
}

bool bullet_btTypedConstraint_isEnabled(btTypedConstraint* c_this){
	bool c_out = c_this->isEnabled();
	bool wrap_out = (c_out);
	return wrap_out;
}

bool bullet_btTypedConstraint_needsFeedback(btTypedConstraint* c_this){
	bool c_out = c_this->needsFeedback();
	bool wrap_out = (c_out);
	return wrap_out;
}

void bullet_btTypedConstraint_setBreakingImpulseThreshold(btTypedConstraint* c_this,double threshold){
	btScalar c_arg_threshold=threshold;
	c_this->setBreakingImpulseThreshold(c_arg_threshold);
}

void bullet_btTypedConstraint_setDbgDrawSize(btTypedConstraint* c_this,double dbgDrawSize){
	btScalar c_arg_dbgDrawSize=dbgDrawSize;
	c_this->setDbgDrawSize(c_arg_dbgDrawSize);
}

void bullet_btTypedConstraint_setEnabled(btTypedConstraint* c_this,bool enabled){
	bool c_arg_enabled=enabled;
	c_this->setEnabled(c_arg_enabled);
}

void bullet_btTypedConstraint_setJointFeedback(btTypedConstraint* c_this,btJointFeedback* jointFeedback){
	btJointFeedback * c_arg_jointFeedback=(btJointFeedback *)(void*)(jointFeedback);
	c_this->setJointFeedback(c_arg_jointFeedback);
}

void bullet_btTypedConstraint_setOverrideNumSolverIterations(btTypedConstraint* c_this,int overideNumIterations){
	int c_arg_overideNumIterations=overideNumIterations;
	c_this->setOverrideNumSolverIterations(c_arg_overideNumIterations);
}

void bullet_btTypedConstraint_setUserConstraintId(btTypedConstraint* c_this,int uid){
	int c_arg_uid=uid;
	c_this->setUserConstraintId(c_arg_uid);
}

void bullet_btTypedConstraint_setUserConstraintPtr(btTypedConstraint* c_this,void* ptr){
	void * c_arg_ptr=(void *)(void*)(ptr);
	c_this->setUserConstraintPtr(c_arg_ptr);
}

void bullet_btTypedConstraint_setUserConstraintType(btTypedConstraint* c_this,int userConstraintType){
	int c_arg_userConstraintType=userConstraintType;
	c_this->setUserConstraintType(c_arg_userConstraintType);
}

btJointFeedback* bullet_NewbtJointFeedback(){
	btJointFeedback* wrap_out = new btJointFeedback();
	return wrap_out;
}

btVector3* bullet_btJointFeedback_GetFieldOfM_appliedForceBodyA(btJointFeedback* c_this){
	return (btVector3*)(&c_this->m_appliedForceBodyA);
}

btVector3* bullet_btJointFeedback_GetFieldOfM_appliedForceBodyB(btJointFeedback* c_this){
	return (btVector3*)(&c_this->m_appliedForceBodyB);
}

btVector3* bullet_btJointFeedback_GetFieldOfM_appliedTorqueBodyA(btJointFeedback* c_this){
	return (btVector3*)(&c_this->m_appliedTorqueBodyA);
}

btVector3* bullet_btJointFeedback_GetFieldOfM_appliedTorqueBodyB(btJointFeedback* c_this){
	return (btVector3*)(&c_this->m_appliedTorqueBodyB);
}

btAngularLimit* bullet_NewbtAngularLimit(){
	btAngularLimit* wrap_out = new btAngularLimit();
	return wrap_out;
}

void bullet_btAngularLimit_fit(btAngularLimit* c_this,double* angle){
	btScalar& c_arg_angle=(btScalar&)(*angle);
	c_this->fit(c_arg_angle);
}

double bullet_btAngularLimit_getBiasFactor(btAngularLimit* c_this){
	btScalar c_out = c_this->getBiasFactor();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getCorrection(btAngularLimit* c_this){
	btScalar c_out = c_this->getCorrection();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getError(btAngularLimit* c_this){
	btScalar c_out = c_this->getError();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getHalfRange(btAngularLimit* c_this){
	btScalar c_out = c_this->getHalfRange();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getHigh(btAngularLimit* c_this){
	btScalar c_out = c_this->getHigh();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getLow(btAngularLimit* c_this){
	btScalar c_out = c_this->getLow();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getRelaxationFactor(btAngularLimit* c_this){
	btScalar c_out = c_this->getRelaxationFactor();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getSign(btAngularLimit* c_this){
	btScalar c_out = c_this->getSign();
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btAngularLimit_getSoftness(btAngularLimit* c_this){
	btScalar c_out = c_this->getSoftness();
	double wrap_out = (c_out);
	return wrap_out;
}

bool bullet_btAngularLimit_isLimit(btAngularLimit* c_this){
	bool c_out = c_this->isLimit();
	bool wrap_out = (c_out);
	return wrap_out;
}

void bullet_btAngularLimit_set(btAngularLimit* c_this,double low,double high,double _softness,double _biasFactor,double _relaxationFactor){
	btScalar c_arg_low=low;
	btScalar c_arg_high=high;
	btScalar c_arg__softness=_softness;
	btScalar c_arg__biasFactor=_biasFactor;
	btScalar c_arg__relaxationFactor=_relaxationFactor;
	c_this->set(c_arg_low,c_arg_high,c_arg__softness,c_arg__biasFactor,c_arg__relaxationFactor);
}

void bullet_btAngularLimit_test(btAngularLimit* c_this,double angle){
	btScalar const c_arg_angle=angle;
	c_this->test(c_arg_angle);
}

#ifdef __cplusplus
}
#endif
